package bombita.menu.selectorNivel;

import bombita.menu.ControladorMenu;
import bombita.menu.Menu;
import bombita.modelo.Juego;
import bombita.vista.Titiritero.VentanaPrincipal;

public class SelectorNivel implements Menu
{
	private static final int indexCount = 3;
	private static final int indexSalida = indexCount - 1;
	private int index;
	private boolean termino;
	private boolean seleccionado;
	private ControladorMenu controlador;
	private VistaSelectorNivel vista;
	
	public SelectorNivel()
	{
		vista = new VistaSelectorNivel();
		index = 0;
		seleccionado = false;
		termino = false;
	}

	private void activarSeleccion()
	{
		if (index == indexCount - 1) {
			termino = true;
		} else {
			VentanaPrincipal.instance().controlador().removerKeyPressObservador(controlador);

			new Juego(index + 1);
			
			vista = new VistaSelectorNivel();
			seleccionado = false;
			index = 0;
			VentanaPrincipal.instance().controlador().agregarKeyPressObservador(controlador);
		}
	}
	
	@Override
	public synchronized void seleccionar()
	{
		seleccionado = true;
		this.notifyAll();
	}

	@Override
	public void anterior()
	{
		index += 1;
		if (index >= indexCount) {
			index -= indexCount;
		}
		vista.moverIndicador(index);
	}

	@Override
	public void siguiente()
	{
		index -= 1;
		if (index < 0) {
			index += indexCount;
		}
		vista.moverIndicador(index);
	}
	
	@Override
	public void atras()
	{
		// activa el ultimo item del menu, es siempre salida
		index = indexSalida;
		this.seleccionar();
	}

	public synchronized void activar()
	{
		while (!termino) {
			controlador = new ControladorMenu(this);
			VentanaPrincipal.instance().controlador().agregarKeyPressObservador(controlador);
			while (!seleccionado) {
				try {
					this.wait();
				} catch (InterruptedException e) {}
			}
			this.activarSeleccion();
			VentanaPrincipal.instance().controlador().removerKeyPressObservador(controlador);
		}
	}
}
